package com.gxc.string;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 单词接龙的规则是：
 *
 * 可用于接龙的单词首字母必须要前一个单词的尾字母相同；
 *
 * 当存在多个首字母相同的单词时，取长度最长的单词，如果长度也相等，则取字典序最小的单词；已经参与接龙的单词不能重复使用。
 *
 * 现给定一组全部由小写字母组成单词数组，并指定其中的一个单词作为起始单词，进行单词接龙，
 *
 * 请输出最长的单词串，单词串是单词拼接而成，中间没有空格。
 *
 * 输入描述
 * 输入的第一行为一个非负整数，表示起始单词在数组中的索引K，0 <= K < N ；
 *
 * 输入的第二行为一个非负整数，表示单词的个数N；
 *
 * 接下来的N行，分别表示单词数组中的单词。
 *
 * 备注：
 *
 * 单词个数N的取值范围为[1, 20]；
 * 单个单词的长度的取值范围为[1, 30]；
 * 输出描述
 * 输出一个字符串，表示最终拼接的单词串。
 */
public class WordChain {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int index = java.lang.Integer.parseInt(scanner.nextLine());
        int n = java.lang.Integer.parseInt(scanner.nextLine());

        List<String> wordList = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            wordList.add(scanner.nextLine());
        }

        StringBuilder builder = new StringBuilder();
        //初始化单词
        String start = wordList.get(index);
        builder.append(start);
        wordList.remove(index);

        int nextWordIndex = findNextWord(wordList, start);
        while (nextWordIndex != -1) {
            String word = wordList.get(nextWordIndex);
            builder.append(word);
            wordList.remove(nextWordIndex);

            nextWordIndex = findNextWord(wordList, word);
        }

        System.out.println(builder);
    }

    private static int findNextWord(List<String> wordList, String start) {
        if (wordList.isEmpty()) return -1;

        String word = "";
        char end = start.charAt(start.length() - 1);
        int maxLength = 0;
        int res = -1;
        for (int i = 0;i < wordList.size(); i++) {
            String str = wordList.get(i);
            char c = str.charAt(0);
            if (c == end) {
                if (str.length() > maxLength || (str.length() == maxLength && str.compareTo(word)<0)) {
                    maxLength = str.length();
                    word = str;
                    res = i;
                }
            }
        }
        return res;
    }
}
